//
//  FFMJRefresh.m
//  beichoo_N_ios
//
//  Created by fanfan on 2017/8/30.
//  Copyright © 2017年 陈健. All rights reserved.
//

#import "FFMJRefresh.h"
#import "MJRefresh.h"
@implementation FFMJRefresh
#pragma --------------------------------- life cycle    ---------------------------------
- (id)initDelegate:(id<FFMJRefreshDelegate>)delegate tableView:(UITableView *)tableView config:(FFMJRefreshConfig *)config{
    if (self = [super init])
    {
        [self setDelegate:delegate];
        [self show_refreshOfTableView:tableView
                               config:config];
    }
    return self;
}
- (id)initDelegate:(id<FFMJRefreshDelegate>)delegate collectionView:(UICollectionView *)collectionView config:(FFMJRefreshConfig *)config
{
    if (self = [super init])
    {
        [self setDelegate:delegate];
        [self show_refreshOfCollectionView:collectionView
                                    config:config];
    }
    return self;
}
#pragma -delegate (setter)
-(void)setDelegate:(id<FFMJRefreshDelegate>)delegate{
    _delegate = delegate;
}
#pragma - 初始化配置 - tableView
- (void)show_refreshOfTableView:(UITableView *)tableView config:(FFMJRefreshConfig *)config{
    self.tableView = tableView;
    self.config = config;
    
    if (config.freshType == 2 && self.config &&  self.tableView)
    {
        //初始化
        MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self
                                                                         refreshingAction:@selector(downDrop)];
        //是否隐藏上次更新的时间
        header.lastUpdatedTimeLabel.hidden = !config.timeLabHidden;
        //是否隐藏刷新状态label
        header.stateLabel.hidden = !config.stateLabHidden;
        //tableView.mj_header接收header
        tableView.mj_header = header;
        //透明度渐变
        tableView.mj_header.automaticallyChangeAlpha = YES;
        
        //上拉
        //初始化并指定方法
        tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self
                                                                   refreshingAction:@selector(upDrop)];
        //指定数据加载完毕的文字
        [(MJRefreshBackNormalFooter *)tableView.mj_footer setTitle:@"没有更多!"
                                                          forState:MJRefreshStateNoMoreData];
    }
    if (config.freshType == 1)
    {
        //上拉
        //初始化并指定方法
        tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self
                                                                   refreshingAction:@selector(upDrop)];
        //指定数据加载完毕的文字
        [(MJRefreshBackNormalFooter *)tableView.mj_footer setTitle:@"没有更多!"
                                                          forState:MJRefreshStateNoMoreData];
    }
}
#pragma - 初始化配置 - collectionView
- (void)show_refreshOfCollectionView:(UICollectionView *)collectionView config:(FFMJRefreshConfig *)config
{
    self.collectionView = collectionView;
    self.config = config;
    
    if (config.freshType == 2 && self.config &&  self.collectionView)
    {
        //初始化
        MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self
                                                                         refreshingAction:@selector(downDrop)];
        //是否隐藏上次更新的时间
        header.lastUpdatedTimeLabel.hidden = !config.timeLabHidden;
        //是否隐藏刷新状态label
        header.stateLabel.hidden = !config.stateLabHidden;
        //tableView.mj_header接收header
        collectionView.mj_header = header;
        //透明度渐变
        collectionView.mj_header.automaticallyChangeAlpha = YES;
        //上拉
        //初始化并指定方法
        collectionView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self
                                                                        refreshingAction:@selector(upDrop)];
        //指定数据加载完毕的文字
        [(MJRefreshBackNormalFooter *)collectionView.mj_footer setTitle:@"没有更多!"
                                                               forState:MJRefreshStateNoMoreData];
        // self.tableView.mj_footer.hidden = YES;
    }
}

#pragma - 下拉刷新
- (void)downDrop
{
    if (self.collectionView)
    {
        if ([self.collectionView.mj_footer isRefreshing])
        {
            [self.collectionView.mj_footer endRefreshing];
        }
        if (_delegate && [_delegate respondsToSelector:@selector(show_downDrop)])
        {
            [_delegate show_downDrop];
        }
        
    }
    if (self.tableView)
    {
        if ([self.tableView.mj_footer isRefreshing])
        {
            [self.tableView.mj_footer endRefreshing];
        }
        if (_delegate && [_delegate respondsToSelector:@selector(show_downDrop)])
        {
            [_delegate show_downDrop];
        }
    }
}
#pragma - 上拉加载更多
- (void)upDrop
{
    if (self.tableView)
    {
        if ([self.tableView.mj_header isRefreshing])
        {
            [self.tableView.mj_header endRefreshing];
        }
        if (_delegate && [_delegate respondsToSelector:@selector(show_upDrop)])
        {
            [_delegate show_upDrop];
        }
    }
    if (self.collectionView)
    {
        if ([self.collectionView.mj_header isRefreshing])
        {
            [self.collectionView.mj_header endRefreshing];
        }
        if (_delegate && [_delegate respondsToSelector:@selector(show_upDrop)])
        {
            [_delegate show_upDrop];
        }
    }
}
#pragma - 开始刷新
- (void)ff_beginRefreshing
{
    if (self.tableView)
    {
        [self.tableView.mj_header beginRefreshing];
        if ([self.tableView.mj_footer isRefreshing])
        {
            [self.tableView.mj_footer endRefreshing];
            self.tableView.mj_footer = nil;
        }
    }
    if (self.collectionView)
    {
        [self.collectionView.mj_header beginRefreshing];
        if ([self.collectionView.mj_footer isRefreshing])
        {
            [self.collectionView.mj_footer endRefreshing];
            self.collectionView.mj_footer = nil;
        }
    }
}
#pragma - 结束刷新
- (void)ff_endRefreshing
{
    dispatch_async(dispatch_get_main_queue(), ^{
        if (self.tableView)
        {
            if ([self.tableView.mj_footer isRefreshing])
            {
                [self.tableView.mj_footer endRefreshing];
            }
            if ([self.tableView.mj_header isRefreshing])
            {
                [self.tableView.mj_header endRefreshing];
            }
        }
        if (self.collectionView)
        {
            if ([self.collectionView.mj_footer isRefreshing])
            {
                [self.collectionView.mj_footer endRefreshing];
            }
            if ([self.collectionView.mj_header isRefreshing])
            {
                [self.collectionView.mj_header endRefreshing];
            }
        }
    });
}
#pragma - 没有更多
- (void)ff_endRefreshinNoMoreData
{
    dispatch_async(dispatch_get_main_queue(), ^{
        if (self.tableView)
        {
            [self.tableView.mj_footer endRefreshingWithNoMoreData];
        }
        if (self.collectionView)
        {
            [self.collectionView.mj_footer endRefreshingWithNoMoreData];
        }
    });
}
#pragma - 数据还有
-(void)ff_resetNoMoreData
{
    dispatch_async(dispatch_get_main_queue(), ^{
        if (self.tableView)
        {
            [self.tableView.mj_footer resetNoMoreData];
        }
        if (self.collectionView)
        {
            [self.collectionView.mj_footer resetNoMoreData];
        }
    });
}
#pragma mark- 是否正在刷新
- (BOOL)ff_isRefreshing
{
    if (self.tableView)
    {
        if ([self.tableView.mj_footer isRefreshing])
        {
            return YES;
        }
        if ([self.tableView.mj_header isRefreshing])
        {
            return YES;
        }
    }
    if (self.collectionView)
    {
        if ([self.collectionView.mj_footer isRefreshing])
        {
            return YES;
        }
        if ([self.collectionView.mj_header isRefreshing])
        {
            return YES;
        }
    }
    return NO;
}
@end
